package com.tanglongan.designPattern.dp00_simpleFactory.demo01;

public class SimpleFactoryClient {

    public static final int PRODUCT_A = 0;
    public static final int PRODUCT_B = 1;
    public static final int PRODUCT_C = 2;

    /**
     * 抽象产品
     */
    public interface IProduct {
        void doSomething();
    }

    /**
     * 具体产品A
     */
    public static class ProductA implements IProduct {
        @Override
        public void doSomething() {
            System.out.println("I am Product A");
        }
    }

    /**
     * 具体产品B
     */
    public static class ProductB implements IProduct {
        @Override
        public void doSomething() {
            System.out.println("I am Product B");
        }
    }

    /**
     * 具体产品C
     */
    public static class ProductC implements IProduct {
        @Override
        public void doSomething() {
            System.out.println("I am Product C");
        }
    }


    /**
     * 简单工厂：提供统一的创建入口，根据客户端的参数来创建不同的对象
     * 优点：屏蔽了对象创建的过程，尤其是复杂对象的创建，这样对于使用方/客户端来说，不需要关心细节，实现了代码的解耦
     * 缺点：当对象的类别较多时，维护成本高，需要通过其他方式去改善
     */
    static class SimpleFactory {
        public static IProduct makeProduct(int kind) {
            switch (kind) {
                case PRODUCT_A:
                    return new ProductA();
                case PRODUCT_B:
                    return new ProductB();
                case PRODUCT_C:
                    return new ProductC();
            }
            return null;
        }
    }

    public static void main(String[] args) {
        IProduct a = SimpleFactory.makeProduct(1);
        a.doSomething();
    }

}
